package com.yuncheng.spcyApi.utils;

/**
 * 这个工具类ChineseNumberConverter定义了两个方法：
 * convertToChinese用于转换数字，getDigits用于将数字拆分为各个位上的数字。
 * 在convertToChinese方法中，我们遍历每一位数字，并根据需要添加中文数字和单位。
 * 注意，这个示例只处理了0到999之间的数字，并且没有处理小数和负数。
 * 如果需要处理更复杂的数字（如更大的数字、小数、负数等），你需要扩展这个工具类。
 * m
 * @author hua
 */
public class ChineseNumberConverterUtils {
    private static final String[] CHINESE_NUMBERS = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
    private static final String[] UNITS = {"", "十", "百", "千"};

    /**
     * 将0到999之间的整数转换为中文大写形式
     *
     * @param number 待转换的数字
     * @return 中文大写形式的数字
     * @throws IllegalArgumentException 如果数字不在0到999之间
     */
    public static String convertToChinese(int number) {
        if (number < 0 || number > 999) {
//            throw new IllegalArgumentException("Number must be between 0 and 999");
            return "九百九十九";
        }

        if (number > 9 && number < 20){
            number = number % 10;
            if (number == 0){
                return "十";
            }else if (number == 1){
                return "十一";
            }else if (number == 2){
                return "十二";
            }else if (number == 3){
                return "十三";
            }else if (number == 4){
                return "十四";
            }else if (number == 5){
                return "十五";
            }else if (number == 6){
                return "十六";
            }else if (number == 7){
                return "十七";
            }else if (number == 8){
                return "十八";
            }else if (number == 9){
                return "十九";
            }
        }

        StringBuilder result = new StringBuilder();

        // 处理千位
        if (number >= 1000) {
//            throw new IllegalArgumentException("Number exceeds 999");
            return "九百九十九";
        } else if (number >= 100) {
            result.append(CHINESE_NUMBERS[number / 100]).append(UNITS[2]);
            number %= 100;
        }

        // 处理百位、十位和个位
        boolean zeroFlag = false; // 标记是否出现了零
        for (int i = 0; i < UNITS.length - 1; i++) {
            int digit = number / (int) Math.pow(10, i + 1);
            if (digit == 0) {
                if (!zeroFlag && result.length() > 0) {
                    result.append(CHINESE_NUMBERS[0]);
                    zeroFlag = true;
                }
            } else {
                result.append(CHINESE_NUMBERS[digit]).append(UNITS[i]);
                zeroFlag = false;
            }
            number %= (int) Math.pow(10, i + 1);
        }

        // 处理个位
        if (number > 0) {
            result.append(CHINESE_NUMBERS[number]);
        }

        // 如果结果以零结尾且长度大于1，则去掉末尾的零
        /*if (result.length() > 1 && result.charAt(result.length() - 1) == CHINESE_NUMBERS[0].charAt(0)) {
            result.deleteCharAt(result.length() - 1);
        }*/

        // 如果整个数都是零，则添加“零”
        if (result.length() == 0) {
            result.append(CHINESE_NUMBERS[0]);
        }

        if (result.toString().length() == 2) {

            return result.toString().replace("零", "十");
        }else if (result.toString().length() == 3){

            if (result.toString().charAt(2) == '零'){
                return result.toString().replace("零", "");
            }
            return result.toString().replace("零", "十");
        }else if (result.toString().length() == 4){

            if (result.toString().charAt(2) == '零'){
                // 不处理
                return result.toString();
            }
            return result.toString().replace("零", "十");
        }else if (result.toString().length() == 5){

            return result.toString().replace("零", "十");
        }


        return result.toString();
    }

    public static void main2(String[] args) {
        System.out.println(convertToChinese(0));       // 输出：零
        System.out.println(convertToChinese(9));       // 输出：零
        System.out.println(convertToChinese(1));       // 输出：一
        System.out.println(convertToChinese(10));      // 输出：十
        System.out.println(convertToChinese(11));      // 输出：十
        System.out.println(convertToChinese(21));      // 输出：十
        System.out.println(convertToChinese(31));      // 输出：十
        System.out.println(convertToChinese(41));      // 输出：十
        System.out.println(convertToChinese(51));      // 输出：十
        System.out.println(convertToChinese(61));      // 输出：十
        System.out.println(convertToChinese(71));      // 输出：十
        System.out.println(convertToChinese(81));      // 输出：十
        System.out.println(convertToChinese(91));      // 输出：十
        System.out.println(convertToChinese(99));      // 输出：十
        System.out.println(convertToChinese(100));     // 输出：一百
        System.out.println(convertToChinese(101));     // 输出：一百零一
        System.out.println(convertToChinese(123));     // 输出：一百二十三
        System.out.println(convertToChinese(234));     // 输出：一百二十三
        System.out.println(convertToChinese(999));     // 输出：九百九十九
         System.out.println(convertToChinese(1000));  // 抛出异常：Number exceeds 999
    }

}
